package com.ruoyi.medicine.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.medicine.domain.HisMedicineDrug;
import com.ruoyi.medicine.domain.HisMedicineOrder;
import com.ruoyi.medicine.domain.HisMedicineOrderDetail;
import com.ruoyi.medicine.domain.HisMedicineOrderRep;
import com.ruoyi.medicine.mapper.HisMedicineDrugMapper;
import com.ruoyi.medicine.mapper.HisMedicineOrderDetailMapper;
import com.ruoyi.medicine.mapper.HisMedicineOrderMapper;
import com.ruoyi.medicine.mapper.HisMedicineOrderRepMapper;
import com.ruoyi.medicine.service.IHisMedicineOrderRepService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;


/**
 * 入库记录信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-09-03
 */
@Service
public class HisMedicineOrderRepServiceImpl implements IHisMedicineOrderRepService
{
    @Autowired
    private HisMedicineOrderRepMapper hisMedicineOrderRepMapper;
    @Autowired
    private HisMedicineOrderMapper hisMedicineOrderMapper;
    @Autowired
    private HisMedicineDrugMapper hisMedicineDrugMapper;
    @Autowired
    private HisMedicineOrderDetailMapper hisMedicineOrderDetailMapper;
    /**
     *
     * 查询入库记录信息
     * 
     * @param repId 入库记录信息主键
     * @return 入库记录信息
     */
    @Override
    public HisMedicineOrderRep selectHisMedicineOrderRepByRepId(Long repId)
    {
        return hisMedicineOrderRepMapper.selectHisMedicineOrderRepByRepId(repId);
    }

    /**
     * 查询入库记录信息列表
     * 
     * @param hisMedicineOrderRep 入库记录信息
     * @return 入库记录信息
     */
    @Override
    public List<HisMedicineOrderRep> selectHisMedicineOrderRepList(HisMedicineOrderRep hisMedicineOrderRep)
    {
        return hisMedicineOrderRepMapper.selectHisMedicineOrderRepList(hisMedicineOrderRep);
    }

    /**
     * 新增入库记录信息
     * 
     * @param hisMedicineOrderRep 入库记录信息
     * @return 结果
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
    public int insertHisMedicineOrderRep(HisMedicineOrderRep hisMedicineOrderRep)
    {
        hisMedicineOrderRep.setCreateTime(DateUtils.getNowDate());
        //修改订单状态
        HisMedicineOrder hisMedicineOrder = new HisMedicineOrder();
        hisMedicineOrder.setUpdateTime(new Date());
        hisMedicineOrder.setRemark(hisMedicineOrderRep.getRepContent());
        hisMedicineOrder.setOrderStatus(hisMedicineOrderRep.getRepResult());
        hisMedicineOrder.setOrderId(hisMedicineOrderRep.getOrderId());
        hisMedicineOrderMapper.updateHisMedicineOrder(hisMedicineOrder);
        //入库 添加药品数量
          //根据订单id查详情
        HisMedicineOrderDetail hisMedicineOrderDetail = new HisMedicineOrderDetail();
        hisMedicineOrderDetail.setOrderId(hisMedicineOrderRep.getOrderId());
        List<HisMedicineOrderDetail> hisMedicineOrderDetails = hisMedicineOrderDetailMapper.selectHisMedicineOrderDetailList(hisMedicineOrderDetail);
        hisMedicineOrderDetails.forEach(o->{
            //根据详情的药品id修改到药品数量
            HisMedicineDrug hisMedicineDrug = hisMedicineDrugMapper.selectHisMedicineDrugByDrugId(o.getDrugId());
            hisMedicineDrug.setDrugNum(hisMedicineDrug.getDrugNum()+o.getDetailNum());
            hisMedicineDrug.setDrugId(o.getDrugId());
            hisMedicineDrugMapper.updateHisMedicineDrug(hisMedicineDrug);
        });
        //新增入库记录
        return hisMedicineOrderRepMapper.insertHisMedicineOrderRep(hisMedicineOrderRep);
    }

    /**
     * 修改入库记录信息
     * 
     * @param hisMedicineOrderRep 入库记录信息
     * @return 结果
     */
    @Override
    public int updateHisMedicineOrderRep(HisMedicineOrderRep hisMedicineOrderRep)
    {
        hisMedicineOrderRep.setUpdateTime(DateUtils.getNowDate());
        return hisMedicineOrderRepMapper.updateHisMedicineOrderRep(hisMedicineOrderRep);
    }

    /**
     * 批量删除入库记录信息
     * 
     * @param repIds 需要删除的入库记录信息主键
     * @return 结果
     */
    @Override
    public int deleteHisMedicineOrderRepByRepIds(Long[] repIds)
    {
        return hisMedicineOrderRepMapper.deleteHisMedicineOrderRepByRepIds(repIds);
    }

    /**
     * 删除入库记录信息信息
     * 
     * @param repId 入库记录信息主键
     * @return 结果
     */
    @Override
    public int deleteHisMedicineOrderRepByRepId(Long repId)
    {
        return hisMedicineOrderRepMapper.deleteHisMedicineOrderRepByRepId(repId);
    }
}
